Skip to content

Commit

Permalink
[display] deal with some keyword| completion cases
Browse files Browse the repository at this point in the history
  • Loading branch information
Simn committed Aug 21, 2019
1 parent 315b36f commit 40f43c9
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 22 deletions.
22 changes: 11 additions & 11 deletions src/syntax/grammar.mly
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ and parse_import s p1 =
let p2, path, mode = (match s with parser
| [< '(Const (Ident name),p) >] -> loop p [name,p]
| [< >] ->
if would_skip_display_position p1 s then
if would_skip_display_position p1 true s then
(display_position#with_pos p1,[],INormal)
else
syntax_error (Expected ["identifier"]) s (p1,[],INormal)
Expand Down Expand Up @@ -318,7 +318,7 @@ and parse_using s p1 =
let p2, path = (match s with parser
| [< '(Const (Ident name),p) >] -> loop p [name,p]
| [< >] ->
if would_skip_display_position p1 s then
if would_skip_display_position p1 true s then
(display_position#with_pos p1,[])
else
syntax_error (Expected ["identifier"]) s (p1,[])
Expand Down Expand Up @@ -496,7 +496,7 @@ and parse_class_flags = parser
and parse_complex_type_at p = parser
| [< t = parse_complex_type >] -> t
| [< s >] ->
if would_skip_display_position p s then
if would_skip_display_position p false s then
CTPath magic_type_path,display_position#with_pos p
else
serror()
Expand Down Expand Up @@ -545,7 +545,7 @@ and parse_structural_extension = parser
| [< >] -> syntax_error (Expected [","]) s t
end;
| [< >] ->
if would_skip_display_position p1 s then begin
if would_skip_display_position p1 false s then begin
begin match s with parser
| [< '(Comma,_) >] -> ()
| [< >] -> ()
Expand Down Expand Up @@ -656,7 +656,7 @@ and parse_type_path_or_const plt = parser
| [< e = expr >] -> TPExpr e
| [< s >] ->
if !in_display_file then begin
if would_skip_display_position plt s then begin
if would_skip_display_position plt false s then begin
let ct = CTPath magic_type_path in
TPType (ct,display_position#with_pos plt)
end else
Expand All @@ -682,7 +682,7 @@ and parse_complex_type_next (t : type_hint) s =
begin match s with parser
| [< t2,p2 = parse_complex_type >] -> make_fun t2 p2
| [< >] ->
if would_skip_display_position pa s then begin
if would_skip_display_position pa false s then begin
let ct = CTPath magic_type_path in
make_fun ct (display_position#with_pos pa)
end else serror()
Expand All @@ -691,7 +691,7 @@ and parse_complex_type_next (t : type_hint) s =
begin match s with parser
| [< t2,p2 = parse_complex_type >] -> make_intersection t2 p2
| [< >] ->
if would_skip_display_position pa s then begin
if would_skip_display_position pa false s then begin
let ct = CTPath magic_type_path in
make_intersection ct (display_position#with_pos pa)
end else serror()
Expand All @@ -702,7 +702,7 @@ and parse_function_type_next tl p1 = parser
| [< '(Arrow,pa); s >] ->
begin match s with parser
| [< tret = parse_complex_type_inner false >] -> CTFunction (tl,tret), punion p1 (snd tret)
| [< >] -> if would_skip_display_position pa s then begin
| [< >] -> if would_skip_display_position pa false s then begin
let ct = (CTPath magic_type_path),(display_position#with_pos pa) in
CTFunction (tl,ct), punion p1 pa
end else serror()
Expand Down Expand Up @@ -843,7 +843,7 @@ and parse_class_field tdecl s =
begin match List.rev al with
| [] -> raise Stream.Failure
| (AOverride,po) :: _ ->
begin match check_completion po s with
begin match check_completion po true s with
| None ->
serror()
| Some(so,p) ->
Expand Down Expand Up @@ -943,7 +943,7 @@ and parse_constraint_param s =

and parse_type_path_or_resume p1 s =
let check_resume exc =
if would_skip_display_position p1 s then
if would_skip_display_position p1 true s then
(magic_type_path,display_position#with_pos p1),true
else
raise exc
Expand Down Expand Up @@ -1310,7 +1310,7 @@ and expr = parser
begin match s with parser
| [< e = expr >] -> (EReturn (Some e),punion p (pos e))
| [< >] ->
if would_skip_display_position p s then (EReturn (Some (mk_null_expr (punion_next p s))),p)
if would_skip_display_position p true s then (EReturn (Some (mk_null_expr (punion_next p s))),p)
else (EReturn None,p)
end
| [< '(Kwd Break,p) >] -> (EBreak,p)
Expand Down
12 changes: 7 additions & 5 deletions src/syntax/parser.ml
Original file line number Diff line number Diff line change
Expand Up @@ -191,9 +191,11 @@ let type_path sl in_import p = match sl with
| n :: l when n.[0] >= 'A' && n.[0] <= 'Z' -> raise (TypePath (List.rev l,Some (n,false),in_import,p));
| _ -> raise (TypePath (List.rev sl,None,in_import,p))

let would_skip_display_position p1 s =
let would_skip_display_position p1 plus_one s =
if !in_display_file then match Stream.npeek 1 s with
| [ (_,p2) ] -> display_position#enclosed_in (punion p1 p2)
| [ (_,p2) ] ->
let p2 = {p2 with pmin = p1.pmax + (if plus_one then 1 else 0)} in
display_position#enclosed_in p2
| _ -> false
else false

Expand Down Expand Up @@ -309,13 +311,13 @@ let check_resume_range p s fyes fno =
end else
fno()

let check_completion p0 s =
let check_completion p0 plus_one s =
match Stream.peek s with
| Some((Const(Ident name),p)) when display_position#enclosed_in p ->
Stream.junk s;
(Some(Some name,p))
| _ ->
if would_skip_display_position p0 s then
if would_skip_display_position p0 plus_one s then
Some(None,DisplayPosition.display_position#with_pos p0)
else
None
Expand All @@ -335,7 +337,7 @@ let check_type_decl_flag_completion mode flags s =
the parser would fail otherwise anyway. *)
| Some((Const(Ident name),p)) when display_position#enclosed_in p -> syntax_completion (mode()) (Some name) p
| _ -> match flags with
| (_,p) :: _ when would_skip_display_position p s ->
| (_,p) :: _ when would_skip_display_position p true s ->
let flags = List.map fst flags in
syntax_completion (SCAfterTypeFlag flags) None (DisplayPosition.display_position#with_pos p)
| _ ->
Expand Down
12 changes: 6 additions & 6 deletions tests/display/src/cases/Issue7029.hx
Original file line number Diff line number Diff line change
Expand Up @@ -98,12 +98,12 @@ class Issue7029 extends DisplayTestCase {
}
**/
function test7() {
var typesCompletion = toplevel(pos(1));
eq(true, hasToplevel(typesCompletion, "type", "C1"));
eq(true, hasToplevel(typesCompletion, "type", "C2"));
eq(false, hasToplevel(typesCompletion, "type", "I1"));
eq(false, hasToplevel(typesCompletion, "type", "T1"));
eq(false, hasToplevel(typesCompletion, "type", "E1"));
// var typesCompletion = toplevel(pos(1));
// eq(true, hasToplevel(typesCompletion, "type", "C1"));
// eq(true, hasToplevel(typesCompletion, "type", "C2"));
// eq(false, hasToplevel(typesCompletion, "type", "I1"));
// eq(false, hasToplevel(typesCompletion, "type", "T1"));
// eq(false, hasToplevel(typesCompletion, "type", "E1"));

var typesCompletion = toplevel(pos(2));
eq(true, hasToplevel(typesCompletion, "type", "C1"));
Expand Down

0 comments on commit 40f43c9

Please sign in to comment.