-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathevaluation.py
More file actions
71 lines (54 loc) · 2.48 KB
/
Copy pathevaluation.py
File metadata and controls
71 lines (54 loc) · 2.48 KB
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
66
67
68
69
70
71
import os
import re
# Configuración: extensiones, exclusiones, etc.
JAVA_EXTENSION = ".java"
EXCLUDED_DIRS = {"build", "target", ".git", ".idea", "out", "test"}
def is_excluded(path):
return any(excluded in path.split(os.sep) for excluded in EXCLUDED_DIRS)
def strip_comments(java_code):
"""
Elimina comentarios de línea (//) y bloque (/* */) de código Java.
"""
# Eliminar comentarios de bloque
code_no_block_comments = re.sub(r"/\*.*?\*/", "", java_code, flags=re.DOTALL)
# Eliminar comentarios de línea
code_no_line_comments = re.sub(r"//.*", "", code_no_block_comments)
return code_no_line_comments
def analyze_java_project(root_dir="."):
num_files = 0
num_classes = 0
num_code_lines = 0
for dirpath, _, filenames in os.walk(root_dir):
if is_excluded(dirpath):
continue
for filename in filenames:
if not filename.endswith(JAVA_EXTENSION):
continue
num_files += 1
filepath = os.path.join(dirpath, filename)
try:
with open(filepath, "r", encoding="utf-8", errors="ignore") as file:
content = file.read()
clean_code = strip_comments(content)
# Contar clases reales (usando regex simple)
class_matches = re.findall(r"(?m)^\s*(public\s+)?(abstract\s+)?(final\s+)?class\s+\w+", clean_code)
num_classes += len(class_matches)
# Contar líneas de código no vacías (después de eliminar comentarios)
lines = clean_code.splitlines()
num_code_lines += sum(1 for line in lines if line.strip())
except Exception as e:
print(f"Error leyendo {filepath}: {e}")
return num_files, num_classes, num_code_lines
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="Cuenta ficheros, clases y líneas de código en un proyecto Java.")
parser.add_argument("path", help="Ruta al proyecto Java")
parser.add_argument("--exclude", nargs="*", help="Carpetas a excluir", default=[])
args = parser.parse_args()
if args.exclude:
EXCLUDED_DIRS.update(args.exclude)
files, classes, lines = analyze_java_project(args.path)
print("\n📊 Estadísticas del proyecto Java")
print(f"📁 Ficheros .java: {files}")
print(f"🏷️ Clases detectadas: {classes}")
print(f"📏 Líneas de código: {lines}")