Normalerweise entwickle ich Software für die Sprache C. Bevor ich eine Codeüberprüfung anforderte, wollte ich, dass ein Tool selbst überprüft, ob mein Code gemäß den Codierungsregeln geschrieben wurde.
Es ist schwierig, aus dem Syntaxanalyseprozess des Codes etwas zu machen, deshalb habe ich nach einer guten Bibliothek gesucht und gefunden Es schien, dass eine Bibliothek namens pycparser verwendet werden könnte, also habe ich damit ein Codeüberprüfungstool namens "pycreviewer" erstellt. https://github.com/dromar-soft/Pycreviewer
pycparser ist eine von eliben entwickelte C-Sprachsyntax-Analysebibliothek. https://github.com/eliben/pycparser
Static variable name prefix
Stellen Sie sicher, dass der Name der statischen Variablen ein bestimmtes Präfix hat (z. B. 'm_').
#inclide <stdio.h>
static int m_var;
Global variable name prefix
Stellen Sie sicher, dass der Name der globalen Variablen ein bestimmtes Präfix hat (z. B. 'g_').
#inclide <stdio.h>
int g_var;
Too short variable name
Erkennt zu kurze Variablennamen.
int i;
Recursive call
Erkennt rekursive Funktionsaufrufe.
Function blacklist
Erkennt deaktivierte Funktionsaufrufe. (Funktionen, deren Verwendung verboten ist, werden in der später beschriebenen JSON-Datei festgelegt.)
No break statement in the switch-case statement
Erkennt, wo die break () -Anweisung nicht in der switch-case-Anweisung enthalten ist.
switch(flag){
case 0:
break;
case 1:
//No Break
default:
break;
}
No default statement in switch statement
Erkennt, wo die Standardanweisung nicht in der switch-Anweisung definiert ist.
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.
Sie können eine Codeüberprüfung für eine einzelne Quelldatei durchführen, indem Sie pycreviewer.review_file () aufrufen.
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