don't require empty newline at EOF