Is self a valid macro identifier?

A macro identifier is valid if:

  • starts with an uppercase letter

  • contains only numers, uppercase letters or '_'

    valid

    assert "NAME".is_valid_macro_name assert "FIRST_NAME".is_valid_macro_name assert "BLOCK1".is_valid_macro_name

    invalid

    assert not "1BLOCK".is_valid_macro_name assert not "_BLOCK".is_valid_macro_name assert not "FIRST NAME".is_valid_macro_name assert not "name".is_valid_macro_name

Property definitions

template :: macro $ String :: is_valid_macro_name
	# Is `self` a valid macro identifier?
	#
	# A macro identifier is valid if:
	#
	# * starts with an uppercase letter
	# * contains only numers, uppercase letters or '_'
	#
	#     # valid
	#     assert "NAME".is_valid_macro_name
	#     assert "FIRST_NAME".is_valid_macro_name
	#     assert "BLOCK1".is_valid_macro_name
	#     # invalid
	#     assert not "1BLOCK".is_valid_macro_name
	#     assert not "_BLOCK".is_valid_macro_name
	#     assert not "FIRST NAME".is_valid_macro_name
	#     assert not "name".is_valid_macro_name
	fun is_valid_macro_name: Bool do
		if not first.is_upper then return false
		for c in self do
			if not c.is_upper and c != '_' and not c.is_digit then return false
		end
		return true
	end
lib/template/macro.nit:336,2--358,4