-
Notifications
You must be signed in to change notification settings - Fork 0
/
PVS_Studio.py
65 lines (51 loc) · 1.89 KB
/
PVS_Studio.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import subprocess
import threading
import xml.etree.ElementTree as ET
from N10X import Editor as editor
"""
PVS-Studio: https://pvs-studio.com/en/docs/manual/0035/
"""
def __print(msg: str):
editor.LogToBuildOutput(msg)
editor.LogToBuildOutput('\n')
def __read_plog(plog_file):
tree = ET.parse(plog_file)
root = tree.getroot()
sln_path = root.find('Solution_Path')
if sln_path:
sln_ver = sln_path.find('SolutionVersion')
plog_ver = sln_path.find('PlogVersion')
__print(f'Visual Studio: {sln_ver.text}')
__print(f'Plog Version: {sln_ver.text}')
for it in root.findall('PVS-Studio_Analysis_Log'):
project_name = it.find('Project').text
error_code = it.find('ErrorCode').text
short_file = it.find('ShortFile').text
line = it.find('Line').text
false_alarm = it.find('FalseAlarm').text
message = it.find('Message').text
__print(f'Project[{project_name}] - Error[{error_code}] - Alarm[{false_alarm}]')
__print(f'\t{short_file} - {line}')
__print(f'\t{message}')
def __pvs_studio_run(cmd: str, plog_file: str):
__print(f'{cmd}\n')
process = subprocess.Popen(cmd)
process.wait()
__read_plog(plog_file)
def PVSStudioCmd():
editor.ClearBuildOutput()
editor.Clear10xOutput()
editor.ShowBuildOutput()
__print('===== PVS-STUDIO =====')
workspace = editor.GetWorkspaceFilename()
exe = 'C:\Program Files (x86)\PVS-Studio\PVS-Studio_Cmd.exe'
arg_sln = f'--target "{workspace}"'
arg_log = f'--output "{workspace}.plog"'
arg_cfg = f'--configuration {editor.GetBuildConfig()}'
arg_plat = f'--platform {editor.GetBuildPlatform()}'
cmd = f'{exe} {arg_sln} {arg_cfg} {arg_plat} {arg_log}'
plog_file = f'{editor.GetWorkspaceFilename()}.plog'
t = threading.Thread(
target=__pvs_studio_run,
args=(cmd, plog_file,))
t.start()