diff --git a/src/dreammaker/builtins.rs b/src/dreammaker/builtins.rs index f1e5f049..7d624743 100644 --- a/src/dreammaker/builtins.rs +++ b/src/dreammaker/builtins.rs @@ -433,7 +433,6 @@ pub fn register_builtins(tree: &mut ObjectTree) -> Result<(), DMError> { proc/md5(T); proc/min(A,B,C/*,...*/); proc/missile(Type,Start,End); - proc/new/*Type*/(Args); // special form proc/newlist(A,B,C/*,...*/); proc/nonspantext(Haystack,Needles,Start=1); proc/num2text(N,SigFig=6, Radix); // +1 form, (N,SigFig) (N, Digits, Radix) diff --git a/src/langserver/completion.rs b/src/langserver/completion.rs index 21bb32a5..fe8e8527 100644 --- a/src/langserver/completion.rs +++ b/src/langserver/completion.rs @@ -11,6 +11,43 @@ use dm::objtree::{TypeRef, TypeVar, TypeProc, ProcValue}; use crate::{Engine, Span, is_constructor_name}; use crate::symbol_search::contains; +static PROC_KEYWORDS: &[&str] = &[ + // Implicit variables + "args", + "global", + "src", + "usr", + + // Term + "null", + "as", + ".", + "..", + "new", + // "list", "input", "locate", "pick" appear in builtin proc list + "call", + + // Statement + "return", + "throw", + "while", + "do", + "if", + "else", + "for", + "var", + "set", + "spawn", + "switch", + "try", + "catch", + "continue", + "break", + "goto", + "del", + // "CRASH" appears in builtin proc list +]; + fn item_var(ty: TypeRef, name: &str, var: &TypeVar) -> CompletionItem { let mut detail = ty.pretty_path().to_owned(); if let Some(ref decl) = var.declaration { @@ -344,7 +381,7 @@ impl<'a> Engine<'a> { // implicit proc vars if proc_name.is_some() { - for &name in ["args", "global", "src", "usr"].iter() { + for &name in PROC_KEYWORDS.iter() { if contains(name, query) { results.push(CompletionItem { label: name.to_owned(),