completions

This commit is contained in:
Theis Pieter Hollebeek 2025-10-11 18:38:12 +02:00
parent 407019ba88
commit d9a20c6304
3 changed files with 109 additions and 20 deletions

View File

@ -9,27 +9,24 @@ export class GamelibCompleter {
return;
}
if (prefix.length === 0) {
callback(null, []);
return;
}
const functions = Object.getOwnPropertyNames(Gamelib.prototype);
const wordList = functions.map((func) => {
const definition = Gamelib.prototype[func].toString();
const signature = definition.slice(0, definition.indexOf(")") + 1);
const wordList = functions
.filter((func) => func !== "constructor")
.map((func) => {
const definition = Gamelib.prototype[func].toString();
const signature = definition.slice(0, definition.indexOf(")") + 1);
return {
"name": func,
"value": func,
"snippet": func + "($0)",
"caption": func,
"score": 300,
"meta": "function",
"docHTML": signature,
};
});
return {
name: func,
value: func,
snippet: func + "($0)",
caption: func,
score: 0,
meta: "function",
docHTML: signature,
};
});
return callback(null, wordList);
}

View File

@ -10,6 +10,7 @@ import { CodeStopper } from "./code_stopper.js";
import { Vermiparous } from "./vermiparous.js";
import { promptUpload } from "./prompt_upload.js";
import { GamelibCompleter } from "./gamelib_completer.js";
import { TextCompleter } from "./text_completer.js";
const playgroundConsole = new PlaygroundConsole(
document.querySelector("#console-code"),
@ -41,9 +42,12 @@ editor.session.setMode("ace/mode/javascript");
const langTools = ace.require("ace/ext/language_tools");
editor.setOptions({ enableBasicAutocompletion: true, enableLiveAutocompletion: true });
editor.setOptions({
enableBasicAutocompletion: true,
enableLiveAutocompletion: true,
});
langTools.addCompleter(new GamelibCompleter());
langTools.setCompleters([new GamelibCompleter(), new TextCompleter()]);
editor.setValue(sessionStorage.getItem("code") ?? editor.getValue(), -1);

88
src/text_completer.js Normal file
View File

@ -0,0 +1,88 @@
/*REMEMBER 2 add KARLKODER + LIB :-)*/
const KEYWORDS = [
"Array",
"ArrayBuffer",
"BigInt",
"Blob",
"CaretPosition",
"Date",
"Error",
"FormData",
"Headers",
"Infinity",
"Int8Array",
"JSON",
"Map",
"Math",
"NaN",
"Number",
"Object",
"Promise",
"ReadableStream",
"RegExp",
"Request",
"Response",
"Set",
"String",
"Symbol",
"TextDecoder",
"TextEncoder",
"URL",
"Uint8Array",
"WebSocket",
"Worker",
"WritableStream",
"alert",
"atob",
"blur",
"btoa",
"crypto",
"decodeURI",
"decodeURIComponent",
"encodeURI",
"encodeURIComponent",
"fetch",
"isFinite",
"isNaN",
"length",
"localStorage",
"navigator",
"parseFloat",
"parseInt",
"sessionStorage",
"undefined",
"window",
];
export class TextCompleter {
getCompletions(_editor, session, pos, prefix, callback) {
// Check if user has written "lib."
const line = session.doc["$lines"][pos.row].slice(0, pos.column);
if (line.match(/lib\.\w*$/)) {
callback(null, []);
return;
}
const locals = [];
for (let i = 0; i <= pos.row; ++i) {
}
const wordList = []
.concat(locals.map((word) => ({
name: word,
value: word,
score: 0,
meta: "local",
docHTML: signature,
})))
.concat(KEYWORDS.map((word) => ({
name: word,
value: word,
score: 0,
meta: "keyword",
})));
return callback(null, wordList);
}
}