Jelajahi Sumber

fix metadata name argument parsing and resuming

closes #5723
Simon Krajewski 9 tahun lalu
induk
melakukan
73e8210467
2 mengubah file dengan 22 tambahan dan 2 penghapusan
  1. 3 2
      src/syntax/parser.ml
  2. 19 0
      tests/display/src/cases/Metadata.hx

+ 3 - 2
src/syntax/parser.ml

@@ -882,8 +882,9 @@ and meta_name p1 = parser
 	| [< '(Const (Ident i),p) when p.pmin = p1.pmax >] -> (Meta.Custom i), p
 	| [< '(Const (Ident i),p) when p.pmin = p1.pmax >] -> (Meta.Custom i), p
 	| [< '(Kwd k,p) when p.pmin = p1.pmax >] -> (Meta.Custom (s_keyword k)),p
 	| [< '(Kwd k,p) when p.pmin = p1.pmax >] -> (Meta.Custom (s_keyword k)),p
 	| [< '(DblDot,p) when p.pmin = p1.pmax; s >] -> match s with parser
 	| [< '(DblDot,p) when p.pmin = p1.pmax; s >] -> match s with parser
-		| [< '(Const (Ident i),p) >] -> (Meta.parse i), p
-		| [< '(Kwd k,p) >] -> (Meta.parse (s_keyword k)),p
+		| [< '(Const (Ident i),p1) when p1.pmin = p.pmax >] -> (Meta.parse i),punion p p1
+		| [< '(Kwd k,p1) when p1.pmin = p.pmax >] -> (Meta.parse (s_keyword k)),punion p p1
+		| [< >] -> if is_resuming p then Meta.Last,p else raise Stream.Failure
 
 
 and parse_enum_flags = parser
 and parse_enum_flags = parser
 	| [< '(Kwd Enum,p) >] -> [] , p
 	| [< '(Kwd Enum,p) >] -> [] , p

+ 19 - 0
tests/display/src/cases/Metadata.hx

@@ -9,6 +9,25 @@ class Metadata extends DisplayTestCase {
 		eq(true, hasPath(fields(pos(1)), "@:generic"));
 		eq(true, hasPath(fields(pos(1)), "@:generic"));
 	}
 	}
 
 
+	/**
+	@{-1-}:{-2-}
+	class Some { }
+	**/
+	function testCompletion2() {
+		eq(true, hasPath(fields(pos(1)), "@:generic"));
+		eq(true, hasPath(fields(pos(2)), "@:generic"));
+	}
+
+	/**
+	@{-1-}:{-2-}gen{-3-}oric
+	class Some { }
+	**/
+	function testCompletion3() {
+		eq(true, hasPath(fields(pos(1)), "@:generic"));
+		eq(true, hasPath(fields(pos(2)), "@:generic"));
+		eq(true, hasPath(fields(pos(3)), "@:generic"));
+	}
+
 	/**
 	/**
 	@:gen{-1-}eric
 	@:gen{-1-}eric
 	class Some { }
 	class Some { }