Je voudrais savoir s'il existe déjà de bons algorithmes pour détecter la déclaration de fonction, le contenu de la fonction, son accolade d'ouverture et sa fermeture. Pour le développement, le débogage et le test de bogues, il peut être intéressant dans certains cas d'ajouter beaucoup de code dans la plupart des fonctions.Détection et correspondance de l'ouverture de la fonction et de l'accolade dans le code source
Exemple code source:
Test.onLoad=function(event){
Test.initialize();
};
Résultat:
- Nom de la fonction:
Test.onLoad
- Contenu:
Test.initialize();
- accolade d'ouverture trouvé à la ligne:
1
. - Accolade de fermeture trouvée à la ligne
3
.
On pourrait, par exemple, les informations ci-dessus, ajouter facilement une ligne au début de toutes les fonctions et à la fin d'entre eux, à connecter certains paramètres:
Test.onLoad=function(event){
Log("LogInit","function:Test.onLoad","openbraceline:1","content: Test.initialize();");
Test.initialize();
Log("LogEnd ","function:Test.onLoad","endbraceline :5","content: Test.initialize();");
};
Je sais que cette fonctionnalité pourrait aussi être fait avec un simple journal global et avec une pile d'appels, mais il y a encore beaucoup d'exemples où cela pourrait être très utile.
Faire un algorithme simple pour détecter et accolades de match et obtenir les informations de la fonction pourrait être facile, mais il y a beaucoup d'exceptions où il pourrait être vraiment compliqué, et c'est pourquoi Im demande s'il existe déjà de bonnes manières connues de le détecter.
Je ne dérange pas si les exemples d'algorithmes ou de conseils sont dans n'importe quelle langue, je voulais juste voir les meilleures façons de le faire. Notepad ++ est un bon exemple parce qu'il a un plugin qui détecte beaucoup de différents langages de code source et analyse le code avec des couleurs pour chaque partie et fait correspondre les accolades.
Merci à vous deux, Sebastian et Jacob Parker pour vos réponses, très utile. Je ne savais pas à propos de Rhino, JSLint et UglifyJS, bon à savoir :) – xtrm