WIP: Current state before PVP combat investigation
This commit is contained in:
88
count_sloc.py
Normal file
88
count_sloc.py
Normal file
@@ -0,0 +1,88 @@
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
def count_lines():
|
||||
try:
|
||||
# Get list of tracked files
|
||||
result = subprocess.run(['git', 'ls-files'], capture_output=True, text=True, check=True)
|
||||
files = result.stdout.splitlines()
|
||||
except subprocess.CalledProcessError:
|
||||
print("Not a git repository or git error.")
|
||||
return
|
||||
|
||||
stats = {}
|
||||
total_effective = 0
|
||||
total_files = 0
|
||||
|
||||
comments = {
|
||||
'.py': '#',
|
||||
'.js': '//',
|
||||
'.jsx': '//',
|
||||
'.ts': '//',
|
||||
'.tsx': '//',
|
||||
'.css': '/*', # Simple check, not perfect for block comments across lines or inline
|
||||
'.html': '<!--',
|
||||
'.json': None, # JSON doesn't standardized comments, but we count lines
|
||||
'.yml': '#',
|
||||
'.yaml': '#',
|
||||
'.sh': '#',
|
||||
'.md': None
|
||||
}
|
||||
|
||||
ignored_dirs = ['old', 'migrations', 'images', 'claude_sonnet_logs', 'data', 'gamedata/items.json'] # items.json can be huge
|
||||
|
||||
for file_path in files:
|
||||
if any(part in file_path.split('/') for part in ignored_dirs):
|
||||
continue
|
||||
|
||||
# Determine extension
|
||||
_, ext = os.path.splitext(file_path)
|
||||
if ext not in comments and ext not in ['.json', '.md']:
|
||||
# Skip unknown extensions or binary files if not handled
|
||||
# But let's verify if text
|
||||
continue
|
||||
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
|
||||
lines = f.readlines()
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
effective_lines = 0
|
||||
file_total = 0
|
||||
|
||||
comment_char = comments.get(ext)
|
||||
|
||||
for line in lines:
|
||||
line_strip = line.strip()
|
||||
if not line_strip:
|
||||
continue
|
||||
|
||||
file_total += 1
|
||||
|
||||
if comment_char:
|
||||
if line_strip.startswith(comment_char):
|
||||
continue
|
||||
# Special handling for CSS/HTML block comments would be needed for perfect accuracy
|
||||
# keeping it simple: if it starts with comment char, ignore.
|
||||
|
||||
effective_lines += 1
|
||||
|
||||
if ext not in stats:
|
||||
stats[ext] = {'files': 0, 'lines': 0}
|
||||
|
||||
stats[ext]['files'] += 1
|
||||
stats[ext]['lines'] += effective_lines
|
||||
total_effective += effective_lines
|
||||
total_files += 1
|
||||
|
||||
print(f"{'Language':<15} {'Files':<10} {'Effective Lines':<15}")
|
||||
print("-" * 40)
|
||||
for ext, data in sorted(stats.items(), key=lambda x: x[1]['lines'], reverse=True):
|
||||
lang = ext if ext else "No Ext"
|
||||
print(f"{lang:<15} {data['files']:<10} {data['lines']:<15}")
|
||||
print("-" * 40)
|
||||
print(f"{'Total':<15} {total_files:<10} {total_effective:<15}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
count_lines()
|
||||
Reference in New Issue
Block a user