Quellcode durchsuchen

[display] don't complain about body-less functions in completion (closes #5988)

Dan Korostelev vor 8 Jahren
Ursprung
Commit
bd68468102
3 geänderte Dateien mit 29 neuen und 2 gelöschten Zeilen
  1. 12 1
      src/typing/typeload.ml
  2. 16 0
      tests/display/src/cases/Issue5988.hx
  3. 1 1
      tests/display/src/cases/Toplevel.hx

+ 12 - 1
src/typing/typeload.ml

@@ -1562,7 +1562,18 @@ let type_function ctx args ret fmode f do_display p =
 	ctx.curfun <- fmode;
 	ctx.ret <- ret;
 	ctx.opened <- [];
-	let e = match f.f_expr with None -> error "Function body required" p | Some e -> e in
+	let e = match f.f_expr with
+		| None ->
+			if ctx.com.display.dms_error_policy = EPIgnore then
+				(* when we don't care because we're in display mode, just act like
+				   the function has an empty block body. this is fine even if function
+				   defines a return type, because returns aren't checked in this mode
+				*)
+				EBlock [],p
+			else
+				error "Function body required" p
+		| Some e -> e
+	in
 	let e = if not do_display then
 		type_expr ctx e NoValue
 	else begin

+ 16 - 0
tests/display/src/cases/Issue5988.hx

@@ -0,0 +1,16 @@
+package cases;
+
+class Issue5988 extends DisplayTestCase {
+	/**
+	class Main {
+		static function f():Int;
+
+		static function main() {
+			{-1-}
+		}
+	}
+	**/
+	function test() {
+		eq(true, Toplevel.hasToplevel(toplevel(pos(1)), "type", "Array"));
+	}
+}

+ 1 - 1
tests/display/src/cases/Toplevel.hx

@@ -144,7 +144,7 @@ class Toplevel extends DisplayTestCase {
 		eq(true, hasToplevel(typesCompletion, "package", "haxe"));
 	}
 
-	static function hasToplevel(a:Array<ToplevelElement>, kind:String, name:String):Bool {
+	public static function hasToplevel(a:Array<ToplevelElement>, kind:String, name:String):Bool {
 		return a.exists(function(t) return t.kind == kind && t.name == name);
 	}
 }