r1
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright (c) 2017-2018 The PIVX developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
import os, sys
|
||||
from subprocess import check_output
|
||||
|
||||
def countRelevantCommas(line):
|
||||
openParensPosStack = []
|
||||
openParensPos = 0
|
||||
charCounter = 0
|
||||
numRelevantCommas = 0
|
||||
firstOpenParensIndex = line.find("(")
|
||||
|
||||
for char in line:
|
||||
if char == '(':
|
||||
openParensPosStack.append(charCounter)
|
||||
|
||||
if char == ')':
|
||||
openParensPosStack.pop()
|
||||
|
||||
if char == "," and openParensPosStack[-1] == firstOpenParensIndex:
|
||||
numRelevantCommas += 1
|
||||
charCounter += 1
|
||||
|
||||
return numRelevantCommas
|
||||
|
||||
if __name__ == "__main__":
|
||||
out = check_output("git rev-parse --show-toplevel", shell=True, universal_newlines=True)
|
||||
srcDir = out.rstrip() + "/src/"
|
||||
|
||||
filelist = [os.path.join(dp, f) for dp, dn, filenames in os.walk(srcDir) for f in filenames if os.path.splitext(f)[1] == '.cpp' or os.path.splitext(f)[1] == '.h' ]
|
||||
incorrectInstanceCounter = 0
|
||||
|
||||
for file in filelist:
|
||||
f = open(file,"r", encoding="utf-8")
|
||||
data = f.read()
|
||||
rows = data.split("\n")
|
||||
count = 0
|
||||
full_data = []
|
||||
lineCounter = 1
|
||||
|
||||
tempLine = ""
|
||||
tempCount = 0
|
||||
|
||||
for row in rows:
|
||||
# Collapse multiple lines into one
|
||||
tempLine += row
|
||||
|
||||
# Line contains LogPrint or LogPrintf
|
||||
if tempLine.find("LogPrint") != -1:
|
||||
if tempLine.count("(") == tempLine.count(")"):
|
||||
havePercents = tempLine.count('%') > 0
|
||||
|
||||
if havePercents:
|
||||
# This line of code has a format specifier that requires checking number of associated arguments
|
||||
# Determine the number of arguments provided, see if that matches the number of format specifiers
|
||||
# Count the number of commas after the format specifier string. Check to see if it matches the number of format specifiers.
|
||||
# Assumes quotes are not escaped in the specifier string and there are no percent signs when specifying the debug level.
|
||||
|
||||
# First, determine the position of the comma after the format specifier section, named commaAfterEndSpecifierStringIndex
|
||||
firstSpecifierIndex = tempLine.find('%')
|
||||
startSpecifierStringIndex = tempLine.rfind('"',firstSpecifierIndex)
|
||||
endSpecifierStringIndex = tempLine.find('"',firstSpecifierIndex)
|
||||
commaAfterEndSpecifierStringIndex = tempLine.find(',',endSpecifierStringIndex)
|
||||
|
||||
# Count the number of commas after the specifier string
|
||||
line = "(" + tempLine[commaAfterEndSpecifierStringIndex:-1]
|
||||
numCommas = countRelevantCommas(line)
|
||||
|
||||
# Determine number of extra percents after specifier string
|
||||
numExtraPercents = tempLine.count('%', commaAfterEndSpecifierStringIndex)
|
||||
|
||||
# Subtract extra from total count. This is the number of expected specifiers
|
||||
# ignore %%
|
||||
numPercents = tempLine.count('%') - numExtraPercents - 2*tempLine.count('%%')
|
||||
|
||||
if numPercents != numCommas:
|
||||
print("Incorrect number of arguments for LogPrint(f) statement found.")
|
||||
print(str(file) + ":" + str(lineCounter - tempCount))
|
||||
print("Line = " + tempLine)
|
||||
print("numRelevantCommas = " + str(numCommas) + ", numRelevantPercents = " + str(numPercents))
|
||||
print("")
|
||||
|
||||
incorrectInstanceCounter += 1
|
||||
|
||||
# Done with this multiline, clear tempLine
|
||||
tempLine = ""
|
||||
tempCount = 0
|
||||
else:
|
||||
tempCount += 1
|
||||
else:
|
||||
# No LogPrint, clear tempLine
|
||||
tempLine = ""
|
||||
tempCount = 0
|
||||
|
||||
lineCounter += 1
|
||||
|
||||
print("# of incorrect instances: " + str(incorrectInstanceCounter))
|
||||
|
||||
sys.exit(incorrectInstanceCounter)
|
||||
Reference in New Issue
Block a user