Nicolas Cannasse 6 лет назад
Родитель
Сommit
2201bd3915
2 измененных файлов с 20 добавлено и 9 удалено
  1. 17 6
      hide/comp/ScriptEditor.hx
  2. 3 3
      hide/comp/cdb/Cell.hx

+ 17 - 6
hide/comp/ScriptEditor.hx

@@ -46,7 +46,7 @@ class ScriptChecker {
 		}
 
 		var parts = documentName.split(".");
-		var cdbPack : String = config.get("script.cdbPackage");
+		var apis = [];
 		while( parts.length > 0 ) {
 			var path = parts.join(".");
 			parts.pop();
@@ -54,9 +54,18 @@ class ScriptChecker {
 			if( config == null ) continue;
 			var api = (config : GlobalsDef).get(path);
 			if( api == null ) continue;
+			apis.unshift(api);
+		}
 
+		var cdbPack : String = config.get("script.cdbPackage");
+		var context = null;
+		for( api in apis ) {
 			for( f in api.globals.keys() ) {
 				var tname = api.globals.get(f);
+				if( tname == null ) {
+					checker.removeGlobal(f);
+					continue;
+				}
 				var t = checker.types.resolve(tname);
 				if( t == null ) {
 					var path = tname.split(".");
@@ -80,11 +89,8 @@ class ScriptChecker {
 				checker.setGlobal(f, t);
 			}
 
-			if( api.context != null ) {
-				var fields = getFields(api.context);
-				for( f in fields )
-					checker.setGlobal(f.name, f.t);
-			}
+			if( api.context != null )
+				context = api.context;
 
 			if( api.events != null ) {
 				for( f in getFields(api.events) )
@@ -120,6 +126,11 @@ class ScriptChecker {
 			if( api.evalTo != null )
 				this.evalTo = api.evalTo;
 		}
+		if( context != null ) {
+			var fields = getFields(context);
+			for( f in fields )
+				checker.setGlobal(f.name, f.t);
+		}
 	}
 
 	function getFields( tpath : String ) {

+ 3 - 3
hide/comp/cdb/Cell.hx

@@ -76,7 +76,7 @@ class Cell extends Component {
 		case TId:
 			v == "" ? '<span class="error">#MISSING</span>' : (editor.base.getSheet(sheet.name).index.get(v).obj == obj ? v : '<span class="error">#DUP($v)</span>');
 		case TString if( c.kind == Script ):
-			v == "" ? "&nbsp;" : colorizeScript(v);
+			v == "" ? "&nbsp;" : colorizeScript(c,v);
 		case TString, TLayer(_):
 			v == "" ? "&nbsp;" : StringTools.htmlEscape(v).split("\n").join("<br/>");
 		case TRef(sname):
@@ -188,13 +188,13 @@ class Cell extends Component {
 
 	static var KWDS = ["for","if","var","this","while","else","do","break","continue","switch","function","return","new","throw","try","catch","case","default"];
 	static var KWD_REG = new EReg([for( k in KWDS ) "(\\b"+k+"\\b)"].join("|"),"g");
-	function colorizeScript( ecode : String ) {
+	function colorizeScript( c : cdb.Data.Column, ecode : String ) {
 		var code = ecode;
 		code = StringTools.htmlEscape(code);
 		code = code.split("\n").join("<br/>");
 		code = code.split("\t").join("&nbsp;&nbsp;&nbsp;&nbsp;");
 		// typecheck
-		var error = new ScriptEditor.ScriptChecker(editor.config, "cdb."+getDocumentName(), ["cdb."+table.sheet.name => line.obj]).check(ecode);
+		var error = new ScriptEditor.ScriptChecker(editor.config, "cdb."+getDocumentName()+(c == this.column ? "" : "."+ c.name), ["cdb."+table.sheet.name => line.obj]).check(ecode);
 		if( error != null )
 			return '<span class="error">'+code+'</span>';
 		// strings