forked from qt-creator/qt-creator
Add a converter for converting an exported Axivion JSON table into a task file
Change-Id: If722af7472cc174e23a9d98e266874660e86842f Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
67
scripts/axivion2tasks.py
Executable file
67
scripts/axivion2tasks.py
Executable file
@@ -0,0 +1,67 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# Copyright (C) 2024 The Qt Company Ltd.
|
||||||
|
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
|
|
||||||
|
'''
|
||||||
|
axivion2tasks.py - Convert Axivion JSON warnings into Qt Creator task files.
|
||||||
|
|
||||||
|
Process a file produced by an Axivion JSON export
|
||||||
|
|
||||||
|
Only style violations are implemented ATM.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
|
||||||
|
axivion2tasks.py < json-file > taskfile
|
||||||
|
'''
|
||||||
|
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
from enum import Enum, auto
|
||||||
|
|
||||||
|
|
||||||
|
SV_MESSAGE_COLUMN = "message"
|
||||||
|
SV_PATH_COLUMN = "path"
|
||||||
|
SV_LINE_NUMBER_COLUMN = "line"
|
||||||
|
|
||||||
|
|
||||||
|
class Type(Enum):
|
||||||
|
Unknown = auto()
|
||||||
|
StyleViolation = auto()
|
||||||
|
|
||||||
|
|
||||||
|
def columns(data):
|
||||||
|
"""Extract the column keys."""
|
||||||
|
result = []
|
||||||
|
for col in data["columns"]:
|
||||||
|
result.append(col["key"])
|
||||||
|
return set(result)
|
||||||
|
|
||||||
|
|
||||||
|
def detect_type(data):
|
||||||
|
"""Determine file type."""
|
||||||
|
keys = columns(data)
|
||||||
|
if set([SV_MESSAGE_COLUMN, SV_PATH_COLUMN, SV_LINE_NUMBER_COLUMN]) <= keys:
|
||||||
|
return Type.StyleViolation
|
||||||
|
return Type.Unknown
|
||||||
|
|
||||||
|
|
||||||
|
def print_warning(path, line_number, text):
|
||||||
|
print(f"{path}\t{line_number}\twarn\t{text}")
|
||||||
|
|
||||||
|
|
||||||
|
def print_style_violations(data):
|
||||||
|
rows = data["rows"]
|
||||||
|
for row in rows:
|
||||||
|
print_warning(row[SV_PATH_COLUMN], row[SV_LINE_NUMBER_COLUMN], row[SV_MESSAGE_COLUMN])
|
||||||
|
return len(rows)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
data = json.load(sys.stdin)
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
file_type = detect_type(data)
|
||||||
|
if file_type == Type.StyleViolation:
|
||||||
|
count = print_style_violations(data)
|
||||||
|
if count:
|
||||||
|
print(f"{count} issue(s) found.", file=sys.stderr)
|
Reference in New Issue
Block a user