159 lines
4.6 KiB
GDScript3
159 lines
4.6 KiB
GDScript3
|
const FileStatistics: Script = preload("./FileStatistics.gd")
|
||
|
const ConfigFileStatistics: Script = preload("./extensions/ConfigFileStatistics.gd")
|
||
|
const CSharpStatistics: Script = preload("./extensions/CSharpStatistics.gd")
|
||
|
const GDScriptStatistics: Script = preload("./extensions/GDScriptStatistics.gd")
|
||
|
const JSONStatistics: Script = preload("./extensions/JSONStatistics.gd")
|
||
|
const MarkdownStatistics: Script = preload("./extensions/MarkdownStatistics.gd")
|
||
|
const ResourceStatistics: Script = preload("./extensions/ResourceStatistics.gd")
|
||
|
const YAMLStatistics: Script = preload("./extensions/YAMLStatistics.gd")
|
||
|
|
||
|
var directories: PackedStringArray
|
||
|
|
||
|
var scenes: Array
|
||
|
var resources: Array
|
||
|
var scripts: Array
|
||
|
var misc: Array
|
||
|
|
||
|
func _load_dir(root := "res://") -> int:
|
||
|
if !path_force_included(root) && path_ignored(root):
|
||
|
return OK
|
||
|
var directory := DirAccess.open(root)
|
||
|
if !directory:
|
||
|
return DirAccess.get_open_error()
|
||
|
for dir in directory.get_directories():
|
||
|
_load_dir(root + dir + "/")
|
||
|
for file_name in directory.get_files():
|
||
|
var current_path: String = root + file_name
|
||
|
if !path_force_included(current_path) && path_ignored(current_path):
|
||
|
continue
|
||
|
var file_stats: FileStatistics = get_file_loader(current_path)
|
||
|
if file_stats._load_dir(current_path) == OK:
|
||
|
if file_stats._is_scene():
|
||
|
scenes.append(file_stats)
|
||
|
elif file_stats._is_script():
|
||
|
scripts.append(file_stats)
|
||
|
elif file_stats._is_resource():
|
||
|
resources.append(file_stats)
|
||
|
else:
|
||
|
misc.append(file_stats)
|
||
|
return OK
|
||
|
|
||
|
func get_used_langauges() -> PackedStringArray:
|
||
|
var languages: PackedStringArray = []
|
||
|
for file_stats in scripts:
|
||
|
var extension: String = file_stats._get_extension()
|
||
|
if not file_stats._get_extension() in languages:
|
||
|
languages.append(extension)
|
||
|
return languages
|
||
|
|
||
|
func get_total_lines(of_scripts: bool = true) -> int:
|
||
|
var source: Array = scripts if of_scripts else misc
|
||
|
var total: int
|
||
|
for file_stats in source:
|
||
|
total += file_stats.total_lines
|
||
|
return total
|
||
|
|
||
|
func get_total_code_lines(of_scripts: bool = true) -> int:
|
||
|
var source: Array = scripts if of_scripts else misc
|
||
|
var total: int
|
||
|
for file_stats in source:
|
||
|
total += file_stats.source_code_lines
|
||
|
return total
|
||
|
|
||
|
func get_total_comment_lines(of_scripts: bool = true) -> int:
|
||
|
var source: Array = scripts if of_scripts else misc
|
||
|
var total: int
|
||
|
for file_stats in source:
|
||
|
total += file_stats.comment_lines
|
||
|
return total
|
||
|
|
||
|
func get_total_blank_lines(of_scripts: bool = true) -> int:
|
||
|
var source: Array = scripts if of_scripts else misc
|
||
|
var total: int
|
||
|
for file_stats in source:
|
||
|
total += file_stats.blank_lines
|
||
|
return total
|
||
|
|
||
|
func get_total_nodes() -> int:
|
||
|
var total: int
|
||
|
for file_stats in scenes:
|
||
|
total += file_stats.node_count
|
||
|
return total
|
||
|
|
||
|
func get_total_connections() -> int:
|
||
|
var total: int
|
||
|
for file_stats in scenes:
|
||
|
total += file_stats.connection_count
|
||
|
return total
|
||
|
|
||
|
func get_total_scenes_size() -> int:
|
||
|
var total: int
|
||
|
for file_stats in scenes:
|
||
|
total += file_stats.size
|
||
|
return total
|
||
|
|
||
|
func get_total_scripts_size() -> int:
|
||
|
var total: int
|
||
|
for file_stats in scripts:
|
||
|
total += file_stats.size
|
||
|
return total
|
||
|
|
||
|
func get_other_files_size() -> int:
|
||
|
var total: int
|
||
|
for file_stats in misc:
|
||
|
total += file_stats.size
|
||
|
return total
|
||
|
|
||
|
func get_file_loader(file_path: String) -> FileStatistics:
|
||
|
match file_path.get_extension().to_lower():
|
||
|
"cs":
|
||
|
return CSharpStatistics.new()
|
||
|
"ini", "cfg":
|
||
|
return ConfigFileStatistics.new()
|
||
|
"gd":
|
||
|
return GDScriptStatistics.new()
|
||
|
"md":
|
||
|
return MarkdownStatistics.new()
|
||
|
"json":
|
||
|
return JSONStatistics.new()
|
||
|
"yml", "yaml":
|
||
|
return YAMLStatistics.new()
|
||
|
|
||
|
return ResourceStatistics.new()
|
||
|
|
||
|
func duplicate():
|
||
|
var clone = get_script().new()
|
||
|
clone.directories = directories
|
||
|
clone.scenes = scenes.duplicate()
|
||
|
clone.resources = resources.duplicate()
|
||
|
clone.scripts = scripts.duplicate()
|
||
|
clone.misc = misc.duplicate()
|
||
|
return clone
|
||
|
|
||
|
static func is_path_ignored(path: String) -> bool:
|
||
|
if not Engine.is_editor_hint():
|
||
|
return false
|
||
|
var ignores: PackedStringArray = ProjectSettings.get_setting("statistics/ignore")
|
||
|
for expression in ignores:
|
||
|
if path.matchn(expression):
|
||
|
return true
|
||
|
return false
|
||
|
|
||
|
static func path_ignored(path: String) -> bool:
|
||
|
#if not Engine.is_editor_hint():
|
||
|
#return false
|
||
|
var expressions: PackedStringArray = ProjectSettings.get_setting("statistics/ignore")
|
||
|
for expression in expressions:
|
||
|
if path.matchn(expression):
|
||
|
return true
|
||
|
return false
|
||
|
|
||
|
static func path_force_included(path: String) -> bool:
|
||
|
#if not Engine.is_editor_hint():
|
||
|
#return false
|
||
|
var expressions: PackedStringArray = ProjectSettings.get_setting("statistics/force_include")
|
||
|
for expression in expressions:
|
||
|
if path.matchn(expression):
|
||
|
return true
|
||
|
return false
|