2
0
Эх сурвалжийг харах

check parent arguments typing in domkit editor

Nicolas Cannasse 7 сар өмнө
parent
commit
556b832191
1 өөрчлөгдсөн 21 нэмэгдсэн , 15 устгасан
  1. 21 15
      hide/comp/DomkitEditor.hx

+ 21 - 15
hide/comp/DomkitEditor.hx

@@ -550,8 +550,8 @@ class DomkitChecker extends ScriptEditor.ScriptChecker {
 		if( c == null )
 			c = makeComponent(name);
 		c.parent = parent;
-		if( e.arguments == null )
-			c.arguments = parent == null ? [] : parent.arguments;
+		if( e.arguments == null || e.arguments.length == 0 )
+			c.arguments = parent == null || e.parent.arguments.length != 0 ? [] : parent.arguments;
 		else {
 			c.arguments = [];
 			for( i => a in e.arguments ) {
@@ -596,28 +596,34 @@ class DomkitChecker extends ScriptEditor.ScriptChecker {
 			domkitError("Invalid condition", e.condition.pmin, e.condition.pmax);
 		if( e.attributes.length > 0 )
 			domkitError("Invalid attribute", e.attributes[0].pmin, e.attributes[0].pmax);
+		if( e.parent != null )
+			checkArguments(parent, e.parent.arguments, e.parent.pmin, e.parent.pmax);
 		return c;
 	}
 
+	function checkArguments( c : TypedComponent, args : Array<domkit.MarkupParser.Argument>, pmin, pmax ) {
+		for( i => a in args ) {
+			var arg = c.arguments[i];
+			if( arg == null )
+				domkitError("Too many arguments (require "+[for( a in c.arguments ) a.name].join(",")+")",a.pmin,a.pmax);
+			var t = switch( a.value ) {
+			case RawValue(_): t_string;
+			case Code(code): typeCode(code, a.pmin, arg.t);
+			};
+			unify(t, arg.t, c, arg.name, a);
+		}
+		for( i in args.length...c.arguments.length )
+			if( !c.arguments[i].opt )
+				domkitError("Missing required argument "+c.arguments[i].name,pmin,pmax);
+	}
+
 	function checkDMLRec( e : domkit.MarkupParser.Markup ) {
 		switch( e.kind ) {
 		case Node(name):
 			var c = resolveComp(name);
 			if( c == null )
 				domkitError("Unknown component "+name, e.pmin, e.pmin + name.length);
-			for( i => a in e.arguments ) {
-				var arg = c.arguments[i];
-				if( arg == null )
-					domkitError("Too many arguments (require "+[for( a in c.arguments ) a.name].join(",")+")",a.pmin,a.pmax);
-				var t = switch( a.value ) {
-				case RawValue(_): t_string;
-				case Code(code): typeCode(code, a.pmin, arg.t);
-				};
-				unify(t, arg.t, c, arg.name, a);
-			}
-			for( i in e.arguments.length...c.arguments.length )
-				if( !c.arguments[i].opt )
-					domkitError("Missing required argument "+c.arguments[i].name,e.pmin,e.pmax);
+			checkArguments(c, e.arguments, e.pmin, e.pmax);
 			for( a in e.attributes ) {
 				var pname = haxeToCss(a.name);
 				switch( pname ) {