web-dev-qa-db-fra.com

Analyseur pour C #

Quels analyseurs sont disponibles pour analyser le code C #?

Je recherche un analyseur C # qui peut être utilisé en C # et me donne accès aux informations de ligne et de fichier sur chaque artefact du code analysé.

99
Julien Hoarau

Fonctionne sur le code source:

Travaux d'assemblage:

Le problème avec l'assembly "parsing" est que nous avons moins d'informations sur la ligne et le fichier (les informations sont basées sur le fichier .pdb, et Pdb contient des informations sur les lignes uniquement pour les méthodes)

Je recommande personnellement Mono.Cecil et NRefactory .

116
Julien Hoarau

Mono (open source) inclut le compilateur C # (et bien sûr l'analyseur)

7
aku

Si vous allez compiler des assemblys C # v3.5 vers .net:

var cp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });

http://msdn.Microsoft.com/en-us/library/Microsoft.csharp.csharpcodeprovider.aspx

6
zproxy

Si vous connaissez ANTLR, vous pouvez utiliser grammaire Antlr C # .

5
prosseek

J'ai implémenté exactement ce que vous demandez (AST Parsing of C # code) au projet OWASP O2 Platform en utilisant SharpDevelop AST APIs.

Afin de faciliter la consommation, j'ai écrit une API rapide qui expose un certain nombre d'éléments de code source clés (à l'aide d'instructions, de types, de méthodes, de propriétés, de champs, de commentaires) et est capable de réécrire le code C # d'origine en C # et en VBNET .

Vous pouvez voir cette API en action sur ce fichier de script O2 XRule: ascx_View_SourceCode_AST.cs.o2 .

Par exemple, voici comment vous traitez un texte de code source C # et remplissez un certain nombre de TreeViews & TextBoxes:

    public void updateView(string sourceCode)
    {   
        var ast = new Ast_CSharp(sourceCode);
        ast_TreeView.show_Ast(ast);
        types_TreeView.show_List(ast.astDetails.Types, "Text");
        usingDeclarations_TreeView.show_List(ast.astDetails.UsingDeclarations,"Text");
        methods_TreeView.show_List(ast.astDetails.Methods,"Text");
        fields_TreeView.show_List(ast.astDetails.Fields,"Text");
        properties_TreeView.show_List(ast.astDetails.Properties,"Text");
        comments_TreeView.show_List(ast.astDetails.Comments,"Text");

        rewritenCSharpCode_SourceCodeEditor.setDocumentContents(ast.astDetails.CSharpCode, ".cs");
        rewritenVBNet_SourceCodeEditor.setDocumentContents(ast.astDetails.VBNetCode, ".vb");                                
    }

L'exemple sur ascx_View_SourceCode_AST.cs.o2 montre également comment vous pouvez ensuite utiliser les informations recueillies à partir du AST pour sélectionner sur le code source un type, une méthode, un commentaire, etc..

Pour référence, voici le code API qui a écrit (notez que c'est ma première passe à utiliser C # AST AST, et je continue à comprendre comment cela fonctionne):

4
Dinis Cruz

Nous avons récemment publié un analyseur C # qui gère toutes les fonctionnalités C # 4.0 ainsi que la nouvelle fonctionnalité asynchrone: analyseur C # et CodeDOM

Cette bibliothèque génère un modèle d'objet sémantique qui conserve les commentaires et les informations de mise en forme et peut être modifié et enregistré. Il prend également en charge l'utilisation de requêtes LINQ pour analyser le code source.

3
Ken Beckett
2
Galwegian

SharpDevelop , un IDE open source, est livré avec un analyseur de code basé sur les visiteurs qui fonctionne très bien. Il peut être utilisé indépendamment de l'IDE.

2
Akselsson

Pensez à utiliser la réflexion sur un binaire construit au lieu d'analyser directement le code C #. L'API de réflexion est vraiment facile à utiliser et peut-être pouvez-vous obtenir toutes les informations dont vous avez besoin?

2
Hallgrim

Peut-être pourriez-vous essayer avec Irony sur irony.codeplex.com.

C'est très rapide et une grammaire c # existe déjà.

La grammaire elle-même est écrite directement en c # à la manière de BNF (obtenue avec des surcharges d'opérateurs)

La meilleure chose avec cela est que la "grammaire" produit directement le AST.

2
SeeSoft

Jetez un oeil à Gold Parser . Il possède une UI très intuitive qui vous permet de tester de manière interactive votre grammaire et de générer du code C #. Il existe de nombreux exemples disponibles et il est entièrement gratuit.

2
sbeskur

Vous devriez certainement vérifier Roslyn puisque MS vient d'ouvrir (ou ouvrira bientôt) le code avec une licence Apache 2 ici . Vous pouvez également découvrir un moyen d'analyser ces informations avec ce code à partir de GitHub .

2
Jason

Quelque chose qui prend de l'ampleur et très approprié pour le travail est Nemerle

vous pouvez voir comment cela pourrait le résoudre dans ces vidéos de NDC:

1
Stéphane

Pas en C #, mais un analyseur C # 2/3/4 complet qui construit des AST complets est disponible avec notre DMS Software Reengineering Toolkit .

DMS fournit une vaste infrastructure pour l'analyse, la construction d'arbres, la construction de tables de symboles et d'analyses de flux, la transformation de source à source et la régénération du code source à partir des AST (modifiés). (Il gère également de nombreux autres langages que le simple C #.)

EDIT (septembre) 2013: Cette réponse n'a pas été mise à jour récemment. DMS gère depuis longtemps C # 5.0

1
Ira Baxter