Je développe généralement des logiciels pour le langage C Avant de demander une révision de code, je voulais un outil pour vérifier moi-même que mon code a été écrit selon les règles de codage.
C'est difficile à faire à partir du processus d'analyse syntaxique du code, j'ai donc cherché une bonne bibliothèque et trouvé Il semblait qu'une bibliothèque appelée pycparser pouvait être utilisée, j'ai donc créé un outil de révision de code "pycreviewer" en l'utilisant. https://github.com/dromar-soft/Pycreviewer
pycparser est une bibliothèque d'analyse syntaxique du langage C développée par eliben. https://github.com/eliben/pycparser
Static variable name prefix
Assurez-vous que le nom de la variable statique a un préfixe spécifique (par exemple "m_").
#inclide <stdio.h>
static int m_var;
Global variable name prefix
Assurez-vous que le nom de la variable globale a un préfixe spécifique (par exemple «g_»).
#inclide <stdio.h>
int g_var;
Too short variable name
Détecte les noms de variables trop courts.
int i;
Recursive call
Détecte les appels récursifs aux fonctions.
Function blacklist
Détecte les appels de fonction désactivés. (Les fonctions interdites d'utilisation sont définies dans le fichier JSON décrit plus loin)
No break statement in the switch-case statement
Détecte où l'instruction break () n'est pas incluse dans l'instruction switch-case.
switch(flag){
case 0:
break;
case 1:
//No Break
default:
break;
}
No default statement in switch statement
Détecte les endroits où l'instruction par défaut n'est pas définie dans l'instruction switch.
switch(f){
case 0:
break;
case 1:
break;
//No Default
}
{
"version": "0.1.0",
"conditions":{
"static_variable_prefix":{
"id":"R001",
"param":"m_",
"level":"SHOULD"
},
"global_variable_prefix":{
"id":"R002",
"param":"g_",
"level":"SHOULD"
},
"variable_short_name":{
"id":"R003",
"param":2,
"level":"MUST"
},
"recursive_call":{
"id":"R004",
"param":true,
"level":"MUST"
},
"function_blacklist":{
"id":"R005",
"param":[
"malloc",
"free"
],
"level":"WANT"
},
"no_break_in_switch":{
"id":"R006",
"param":true,
"level":"SHOULD"
},
"no_default_in_switch":{
"id":"R007",
"param":true,
"level":"SHOULD"
}
}
}
git clone https://github.com/dromar-soft/Pycreviewer.git
python -m pycreviewer
input source folder >> 'your sourcecode directory'
{'id': 'R006', 'level': 'SHOULD', 'msg': 'No break statement in switch-case statement.', 'file': '/xxx/xxx/xxx.c', 'line': X, 'column': X}
{'id': 'R007', 'level': 'SHOULD', 'msg': 'No default statement in switch-case statement.', 'file': '/xxx/xxx/xxx.c', 'line': X, 'column': Y}
...
...
...
X files codereview completed. Please enter esc key.
Vous pouvez effectuer une révision de code sur un seul fichier source en appelant pycreviewer.review_file ().
def review_file(sourcefile: str, cpp_args=['-E', r'-Ipycreviewer/utils/fake_libc_include'], jsonfile='./default.json') ->list:
"""
Perform code review on a single source file.
The result of the code review is returned in the form of List<CheckResult>.
sourcefile:
the target source file path.
cppargs:
a list of command line arguments for the preprocessor execution of C compiler.
Normally, specifies the preprocessor execution option '-E' and the include option '-Ixxxxx'.
jsonfile:
JSON file path describing the checking conditions for coding rules.
"""
Recommended Posts