#!/usr/bin/python

import glob
import re

TODO_PATTERN = re.compile(r'\s*// TODO\(')
DOC_PATTERN = re.compile(r'\s*//')
EXPECT_PATTERN = re.compile(r'// expect')

num_files = 0
num_docs = 0
num_code = 0
num_empty = 0
num_todos = 0
num_semicolons = 0
num_test_files = 0
num_test_todos = 0
num_expects = 0
num_test_empty = 0
num_test = 0

for source_path in glob.iglob("src/*.[ch]"):
  num_files += 1
  with open(source_path, "r") as input:
    for line in input:
      num_semicolons += line.count(';')
      match = TODO_PATTERN.match(line)
      if match:
        num_todos += 1
        continue

      match = DOC_PATTERN.match(line)
      if match:
        num_docs += 1
        continue

      if (line.strip() == ""):
        num_empty += 1
        continue

      num_code += 1

for test_path in glob.iglob("test/*.wren"):
  num_test_files += 1
  with open(test_path, "r") as input:
    for line in input:
      if (line.strip() == ""):
        num_test_empty += 1
      else:
        num_test += 1

      match = TODO_PATTERN.match(line)
      if match:
        num_test_todos += 1
        continue

      match = EXPECT_PATTERN.search(line)
      if match:
        num_expects += 1
        continue

print "source:"
print "  files          ", num_files
print "  semicolons     ", num_semicolons
print "  TODOs          ", num_todos
print "  comment lines  ", num_docs
print "  code lines     ", num_code
print "  empty lines    ", num_empty
print
print "test:"
print "  files          ", num_test_files
print "  TODOs          ", num_test_todos
print "  expectations   ", num_expects
print "  non-empty lines", num_test
print "  empty lines    ", num_test_empty
