From 472f3cf5206a06f0a7eae721f08f0a43276863cf Mon Sep 17 00:00:00 2001 From: Simon Van Casteren Date: Sat, 4 Jan 2020 13:58:50 +0100 Subject: Added some more stuff to lsp getInfo and completions --- src/lsp.sml | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) (limited to 'src/lsp.sml') diff --git a/src/lsp.sml b/src/lsp.sml index 79b96ef9..e00bd850 100644 --- a/src/lsp.sml +++ b/src/lsp.sml @@ -465,23 +465,27 @@ fun findMatchingStringInEnv (env: ElabEnv.env) (str: string): LspSpec.completion (* TODO PERF SMALL: first match and then equal is not perfect *) val foundEs = ElabEnv.matchEByPrefix env (Substring.string r) val filteredEs = List.filter (fn (name,_) => name = Substring.string r) foundEs + val reduced = List.map (fn (name, c) => + (name, ElabOps.reduceCon env c) + handle ex => (name, (Elab.CUnit, ErrorMsg.dummySpan))) + filteredEs in - (case List.map (fn (name, c) => (name, ElabOps.reduceCon env c)) filteredEs of - [] => [] - | (name, (Elab.TRecord (Elab.CRecord (_, fields), l2_), l1_)) :: _ => - getCompletionsFromFields env (name ^ ".") (Substring.string str) fields - | (name, (* TODO this doesn't always work. I've only managed to get it working for tables in a different module *) - ( ( Elab.CApp - ( ( (Elab.CApp - ( ( Elab.CModProj (_, _, "sql_table") - , l4_) - , ( Elab.CRecord (_, fields) - , l3_))) - , l2_) - , _)) - , l1_)) :: _ => - getCompletionsFromFields env (name ^ ".") (Substring.string str) fields - | _ => []) + case reduced of + [] => [] + | (name, (Elab.TRecord (Elab.CRecord (_, fields), l2_), l1_)) :: _ => + getCompletionsFromFields env (name ^ ".") (Substring.string str) fields + | (name, + ( ( Elab.CApp + ( ( (Elab.CApp + ( ( Elab.CModProj (_, _, "sql_table") + , l4_) + , ( Elab.CRecord (_, fields) + , l3_))) + , l2_) + , _)) + , l1_)) :: _ => + getCompletionsFromFields env (name ^ ".") (Substring.string str) fields + | _ => [] end | _ => (* TODO NOTIMPLEMENTED submodules / nested records *) -- cgit v1.2.3