papermario/tools/warnings_count/compare_warnings.py

65 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
import sys
def countFileLines(filename: str) -> int:
with open(filename) as f:
return len(f.readlines())
def main():
parser = argparse.ArgumentParser()
parser.add_argument('currentwarnings', help="Name of file which contains the current warnings of the repo.")
parser.add_argument('newwarnings', help="Name of file which contains the *new* warnings of the repo.")
parser.add_argument("--pr-message", action="store_true")
args = parser.parse_args()
currentLines = countFileLines(args.currentwarnings)
newLines = countFileLines(args.newwarnings)
if newLines > currentLines:
stderr = False
if args.pr_message:
delta = newLines - currentLines
if delta == 1:
print(f"⚠️ This PR introduces a warning:")
else:
print(f"⚠️ This PR introduces {delta} warnings:")
if delta > 100:
stderr = True
print("See log for details.")
else:
print()
print("There are more warnings now. Go fix them!")
print("\tCurrent warnings: " + str(currentLines))
print("\tNew warnings: " + str(newLines))
print()
with open(args.newwarnings) as new:
new = new.readlines()
with open(args.currentwarnings) as current:
current = current.readlines()
for newLine in new:
if "warning: previous declaration of" in newLine:
continue
if newLine not in current:
if stderr:
print(newLine.strip(), file=sys.stderr)
else:
print("- " + newLine.strip())
elif newLines < currentLines:
delta = currentLines - newLines
if args.pr_message:
print(f"✅ This PR fixes {delta} warnings!")
else:
print(f"{delta} warnings fixed.")
if __name__ == "__main__":
main()