Property definitions

gen_nit $ NitModule :: defaultinit
# Template of a Nit module to generate Nit code
class NitModule
	super Template

	# Header on top of the module, usually the documentation
	var header: nullable Writable = null is writable

	# The module's name
	var name: Writable is writable

	# Annotations on the module declaration
	var annotations = new Array[Writable]

	# Importation declarations
	#
	# Accepts two formats:
	# * Module name only, short or qualified: `json`, `gamnit::flat`, etc.
	# * Full importation declaration: `import json`, `private import gamnit::flat`, etc.
	var imports = new Set[Writable]

	# Main content of this module
	var content = new Array[Writable]

	redef fun rendering
	do
		var header = header
		if header != null then add header

		var name = name
		if annotations.is_empty then
			add "module {name}\n\n"
		else
			add "module {name} is\n"
			for annotation in annotations do add "\t{annotation}\n"
			add "end\n\n"
		end

		for i in imports do
			if i.to_s.has("import ") then
				add i
			else
				add "import "
				add i
			end
			add "\n"
		end
		add "\n"

		for l in content do
			add l
			add "\n"
		end
	end
end
lib/gen_nit/gen_nit.nit:45,1--98,3