summaryrefslogtreecommitdiff
path: root/addons/gut/method_maker.gd
diff options
context:
space:
mode:
authorSophia Pearson <codergal89@gmail.com>2022-10-03 22:22:50 +0200
committerSophia Pearson <codergal89@gmail.com>2022-10-04 22:18:18 +0200
commite127ad39e742396030352240d829bc903b1d4464 (patch)
tree10cc21d70bf13181aef7c8ad0344077ff63579a3 /addons/gut/method_maker.gd
parentddbb045f6387a8ba23b1210b27a745516a387a52 (diff)
downloadtexty-e127ad39e742396030352240d829bc903b1d4464.tar.xz
texty-e127ad39e742396030352240d829bc903b1d4464.zip
godot: inital Godot 4 migration
Diffstat (limited to 'addons/gut/method_maker.gd')
-rw-r--r--addons/gut/method_maker.gd304
1 files changed, 0 insertions, 304 deletions
diff --git a/addons/gut/method_maker.gd b/addons/gut/method_maker.gd
deleted file mode 100644
index 11586b9..0000000
--- a/addons/gut/method_maker.gd
+++ /dev/null
@@ -1,304 +0,0 @@
-class CallParameters:
- var p_name = null
- var default = null
-
- func _init(n, d):
- p_name = n
- default = d
-
-
-# ------------------------------------------------------------------------------
-# This class will generate method declaration lines based on method meta
-# data. It will create defaults that match the method data.
-#
-# --------------------
-# function meta data
-# --------------------
-# name:
-# flags:
-# args: [{
-# (class_name:),
-# (hint:0),
-# (hint_string:),
-# (name:),
-# (type:4),
-# (usage:7)
-# }]
-# default_args []
-
-var _utils = load('res://addons/gut/utils.gd').get_instance()
-var _lgr = _utils.get_logger()
-const PARAM_PREFIX = 'p_'
-
-# ------------------------------------------------------
-# _supported_defaults
-#
-# This array contains all the data types that are supported for default values.
-# If a value is supported it will contain either an empty string or a prefix
-# that should be used when setting the parameter default value.
-# For example int, real, bool do not need anything func(p1=1, p2=2.2, p3=false)
-# but things like Vectors and Colors do since only the parameters to create a
-# new Vector or Color are included in the metadata.
-# ------------------------------------------------------
- # TYPE_NIL = 0 — Variable is of type nil (only applied for null).
- # TYPE_BOOL = 1 — Variable is of type bool.
- # TYPE_INT = 2 — Variable is of type int.
- # TYPE_REAL = 3 — Variable is of type float/real.
- # TYPE_STRING = 4 — Variable is of type String.
- # TYPE_VECTOR2 = 5 — Variable is of type Vector2.
- # TYPE_RECT2 = 6 — Variable is of type Rect2.
- # TYPE_VECTOR3 = 7 — Variable is of type Vector3.
- # TYPE_COLOR = 14 — Variable is of type Color.
- # TYPE_OBJECT = 17 — Variable is of type Object.
- # TYPE_DICTIONARY = 18 — Variable is of type Dictionary.
- # TYPE_ARRAY = 19 — Variable is of type Array.
- # TYPE_VECTOR2_ARRAY = 24 — Variable is of type PoolVector2Array.
- # TYPE_TRANSFORM = 13 — Variable is of type Transform.
- # TYPE_TRANSFORM2D = 8 — Variable is of type Transform2D.
- # TYPE_RID = 16 — Variable is of type RID.
- # TYPE_INT_ARRAY = 21 — Variable is of type PoolIntArray.
- # TYPE_REAL_ARRAY = 22 — Variable is of type PoolRealArray.
- # TYPE_STRING_ARRAY = 23 — Variable is of type PoolStringArray.
-
-
-# TYPE_PLANE = 9 — Variable is of type Plane.
-# TYPE_QUAT = 10 — Variable is of type Quat.
-# TYPE_AABB = 11 — Variable is of type AABB.
-# TYPE_BASIS = 12 — Variable is of type Basis.
-# TYPE_NODE_PATH = 15 — Variable is of type NodePath.
-# TYPE_RAW_ARRAY = 20 — Variable is of type PoolByteArray.
-# TYPE_VECTOR3_ARRAY = 25 — Variable is of type PoolVector3Array.
-# TYPE_COLOR_ARRAY = 26 — Variable is of type PoolColorArray.
-# TYPE_MAX = 27 — Marker for end of type constants.
-# ------------------------------------------------------
-var _supported_defaults = []
-
-func _init():
- for _i in range(TYPE_MAX):
- _supported_defaults.append(null)
-
- # These types do not require a prefix for defaults
- _supported_defaults[TYPE_NIL] = ''
- _supported_defaults[TYPE_BOOL] = ''
- _supported_defaults[TYPE_INT] = ''
- _supported_defaults[TYPE_REAL] = ''
- _supported_defaults[TYPE_OBJECT] = ''
- _supported_defaults[TYPE_ARRAY] = ''
- _supported_defaults[TYPE_STRING] = ''
- _supported_defaults[TYPE_DICTIONARY] = ''
- _supported_defaults[TYPE_VECTOR2_ARRAY] = ''
- _supported_defaults[TYPE_RID] = ''
-
- # These require a prefix for whatever default is provided
- _supported_defaults[TYPE_VECTOR2] = 'Vector2'
- _supported_defaults[TYPE_RECT2] = 'Rect2'
- _supported_defaults[TYPE_VECTOR3] = 'Vector3'
- _supported_defaults[TYPE_COLOR] = 'Color'
- _supported_defaults[TYPE_TRANSFORM2D] = 'Transform2D'
- _supported_defaults[TYPE_TRANSFORM] = 'Transform'
- _supported_defaults[TYPE_INT_ARRAY] = 'PoolIntArray'
- _supported_defaults[TYPE_REAL_ARRAY] = 'PoolRealArray'
- _supported_defaults[TYPE_STRING_ARRAY] = 'PoolStringArray'
-
-# ###############
-# Private
-# ###############
-var _func_text = _utils.get_file_as_text('res://addons/gut/double_templates/function_template.txt')
-var _init_text = _utils.get_file_as_text('res://addons/gut/double_templates/init_template.txt')
-
-func _is_supported_default(type_flag):
- return type_flag >= 0 and type_flag < _supported_defaults.size() and _supported_defaults[type_flag] != null
-
-
-func _make_stub_default(method, index):
- return str('__gut_default_val("', method, '",', index, ')')
-
-func _make_arg_array(method_meta, override_size):
- var to_return = []
-
- var has_unsupported_defaults = false
- var dflt_start = method_meta.args.size() - method_meta.default_args.size()
-
- for i in range(method_meta.args.size()):
- var pname = method_meta.args[i].name
- var dflt_text = ''
-
- if(i < dflt_start):
- dflt_text = _make_stub_default(method_meta.name, i)
- else:
- var dflt_idx = i - dflt_start
- var t = method_meta.args[i]['type']
- if(_is_supported_default(t)):
- # strings are special, they need quotes around the value
- if(t == TYPE_STRING):
- dflt_text = str("'", str(method_meta.default_args[dflt_idx]), "'")
- # Colors need the parens but things like Vector2 and Rect2 don't
- elif(t == TYPE_COLOR):
- dflt_text = str(_supported_defaults[t], '(', str(method_meta.default_args[dflt_idx]), ')')
- elif(t == TYPE_OBJECT):
- if(str(method_meta.default_args[dflt_idx]) == "[Object:null]"):
- dflt_text = str(_supported_defaults[t], 'null')
- else:
- dflt_text = str(_supported_defaults[t], str(method_meta.default_args[dflt_idx]).to_lower())
- elif(t == TYPE_TRANSFORM):
- # value will be 4 Vector3 and look like: 1, 0, 0, 0, 1, 0, 0, 0, 1 - 0, 0, 0
- var sections = str(method_meta.default_args[dflt_idx]).split("-")
- var vecs = sections[0].split(",")
- vecs.append_array(sections[1].split(","))
- var v1 = str("Vector3(", vecs[0], ", ", vecs[1], ", ", vecs[2], ")")
- var v2 = str("Vector3(", vecs[3], ", ", vecs[4], ", ", vecs[5], ")")
- var v3 = str("Vector3(", vecs[6], ", ", vecs[7], ", ", vecs[8], ")")
- var v4 = str("Vector3(", vecs[9], ", ", vecs[10], ", ", vecs[11], ")")
- dflt_text = str(_supported_defaults[t], "(", v1, ", ", v2, ", ", v3, ", ", v4, ")")
- elif(t == TYPE_TRANSFORM2D):
- # value will look like: ((1, 0), (0, 1), (0, 0))
- var vectors = str(method_meta.default_args[dflt_idx])
- vectors = vectors.replace("((", "(")
- vectors = vectors.replace("))", ")")
- vectors = vectors.replace("(", "Vector2(")
- dflt_text = str(_supported_defaults[t], "(", vectors, ")")
- elif(t == TYPE_RID):
- dflt_text = str(_supported_defaults[t], 'null')
- elif(t in [TYPE_REAL_ARRAY, TYPE_INT_ARRAY, TYPE_STRING_ARRAY]):
- dflt_text = str(_supported_defaults[t], "()")
- # Everything else puts the prefix (if one is there) from _supported_defaults
- # in front. The to_lower is used b/c for some reason the defaults for
- # null, true, false are all "Null", "True", "False".
- else:
- dflt_text = str(_supported_defaults[t], str(method_meta.default_args[dflt_idx]).to_lower())
- else:
- _lgr.error(str(
- 'Unsupported default param type: ',method_meta.name, '-', method_meta.args[i].name, ' ', t, ' = ', method_meta.default_args[dflt_idx]))
- dflt_text = str('unsupported=',t)
- has_unsupported_defaults = true
-
- # Finally add in the parameter
- to_return.append(CallParameters.new(PARAM_PREFIX + pname, dflt_text))
-
- # Add in extra parameters from stub settings.
- if(override_size != null):
- for i in range(method_meta.args.size(), override_size):
- var pname = str(PARAM_PREFIX, 'arg', i)
- var dflt_text = _make_stub_default(method_meta.name, i)
- to_return.append(CallParameters.new(pname, dflt_text))
-
- return [has_unsupported_defaults, to_return];
-
-
-# Creates a list of parameters with defaults of null unless a default value is
-# found in the metadata. If a default is found in the meta then it is used if
-# it is one we know how support.
-#
-# If a default is found that we don't know how to handle then this method will
-# return null.
-func _get_arg_text(arg_array):
- var text = ''
-
- for i in range(arg_array.size()):
- text += str(arg_array[i].p_name, '=', arg_array[i].default)
- if(i != arg_array.size() -1):
- text += ', '
-
- return text
-
-
-# creates a call to the function in meta in the super's class.
-func _get_super_call_text(method_name, args, super_name=""):
- var params = ''
- for i in range(args.size()):
- params += args[i].p_name
- if(i != args.size() -1):
- params += ', '
-
- return str(super_name, '.', method_name, '(', params, ')')
-
-
-func _get_spy_call_parameters_text(args):
- var called_with = 'null'
-
- if(args.size() > 0):
- called_with = '['
- for i in range(args.size()):
- called_with += args[i].p_name
- if(i < args.size() - 1):
- called_with += ', '
- called_with += ']'
-
- return called_with
-
-
-# ###############
-# Public
-# ###############
-
-func _get_init_text(meta, args, method_params, param_array):
- var text = null
-
- var decleration = str('func ', meta.name, '(', method_params, ')')
- var super_params = ''
- if(args.size() > 0):
- super_params = '.('
- for i in range(args.size()):
- super_params += args[i].p_name
- if(i != args.size() -1):
- super_params += ', '
- super_params += ')'
-
- text = _init_text.format({
- "func_decleration":decleration,
- "super_params":super_params,
- "param_array":param_array,
- "method_name":meta.name
- })
-
- return text
-
-
-# Creates a delceration for a function based off of function metadata. All
-# types whose defaults are supported will have their values. If a datatype
-# is not supported and the parameter has a default, a warning message will be
-# printed and the declaration will return null.
-#
-# path is no longer used
-func get_function_text(meta, path=null, override_size=null, super_name=""):
- var method_params = ''
- var text = null
- var result = _make_arg_array(meta, override_size)
- var has_unsupported = result[0]
- var args = result[1]
-
- var param_array = _get_spy_call_parameters_text(args)
-
- if(has_unsupported):
- # This will cause a runtime error. This is the most convenient way to
- # to stop running before the error gets more obscure. _make_arg_array
- # generates a gut error when unsupported defaults are found.
- method_params = null
- else:
- method_params = _get_arg_text(args);
-
- if(param_array == 'null'):
- param_array = '[]'
-
- if(method_params != null):
- if(meta.name == '_init'):
- text = _get_init_text(meta, args, method_params, param_array)
- else:
- var decleration = str('func ', meta.name, '(', method_params, '):')
- text = _func_text.format({
- "func_decleration":decleration,
- "method_name":meta.name,
- "param_array":param_array,
- "super_call":_get_super_call_text(meta.name, args, super_name)
- })
-
- return text
-
-
-
-
-func get_logger():
- return _lgr
-
-func set_logger(logger):
- _lgr = logger