mirror of
https://github.com/mytechnotalent/Embedded-Hacking.git
synced 2026-07-05 20:17:53 +02:00
Initial commit with strict idiomatic rust enforcement
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
import os
|
||||
import sys
|
||||
import re
|
||||
|
||||
def audit_file(filepath):
|
||||
with open(filepath, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
lines = content.split('\n')
|
||||
errors = []
|
||||
|
||||
# 1. Check header
|
||||
header_found = False
|
||||
for i, line in enumerate(lines[:10]):
|
||||
if line.startswith('//! **File:**') or line.startswith('//! MIT License'):
|
||||
header_found = True
|
||||
break
|
||||
|
||||
if not header_found and not filepath.endswith('mod.rs'):
|
||||
errors.append("Missing or invalid `//!` header block.")
|
||||
|
||||
# 2. Check function length and blank lines
|
||||
in_function = False
|
||||
func_start = 0
|
||||
func_name = ""
|
||||
brace_level = 0
|
||||
blank_lines_in_func = []
|
||||
inline_comment_count = 0
|
||||
|
||||
for i, line in enumerate(lines):
|
||||
stripped = line.strip()
|
||||
|
||||
# Check inline comments
|
||||
if '//' in line and not line.lstrip().startswith('//!'):
|
||||
if not line.lstrip().startswith('///'):
|
||||
inline_comment_count += 1
|
||||
|
||||
if not in_function:
|
||||
if stripped.startswith("fn ") or stripped.startswith("pub fn ") or " fn " in stripped:
|
||||
in_function = True
|
||||
func_start = i
|
||||
func_name = stripped.split("fn ")[1].split("(")[0].strip()
|
||||
brace_level += stripped.count('{') - stripped.count('}')
|
||||
else:
|
||||
brace_level += stripped.count('{') - stripped.count('}')
|
||||
|
||||
if stripped == "":
|
||||
blank_lines_in_func.append(i + 1)
|
||||
|
||||
if brace_level == 0:
|
||||
in_function = False
|
||||
func_len = i - func_start + 1
|
||||
if func_len > 8:
|
||||
errors.append(f"Function `{func_name}` exceeds 8 lines (length: {func_len}, lines {func_start+1}-{i+1}).")
|
||||
if blank_lines_in_func:
|
||||
errors.append(f"Function `{func_name}` contains blank lines at: {blank_lines_in_func}")
|
||||
blank_lines_in_func = []
|
||||
|
||||
if inline_comment_count == 0 and not filepath.endswith('mod.rs'):
|
||||
errors.append("File contains 0 inline (`//`) comments. Must have logic explanations.")
|
||||
|
||||
return errors
|
||||
|
||||
def main(directory):
|
||||
total_errors = 0
|
||||
for root, _, files in os.walk(directory):
|
||||
if 'target' in root or '.git' in root:
|
||||
continue
|
||||
for file in files:
|
||||
if file.endswith('.rs'):
|
||||
filepath = os.path.join(root, file)
|
||||
errors = audit_file(filepath)
|
||||
if errors:
|
||||
print(f"\n[FAIL] {filepath}")
|
||||
for err in errors:
|
||||
print(f" - {err}")
|
||||
total_errors += 1
|
||||
else:
|
||||
print(f"[PASS] {filepath}")
|
||||
|
||||
if total_errors > 0:
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: python auditor.py <directory>")
|
||||
sys.exit(1)
|
||||
main(sys.argv[1])
|
||||
Reference in New Issue
Block a user