Add unknown ranges and open object values
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
const DECODAL_KEYWORDS = new Set(['let', 'in', 'fn', 'match', 'import', 'default']);
|
||||
const DECODAL_TYPES = new Set(['String', 'Int', 'Float', 'Bool']);
|
||||
const DECODAL_TYPES = new Set(['String', 'Int', 'Float', 'Bool', 'Unknown']);
|
||||
const DECODAL_LITERALS = new Set(['true', 'false']);
|
||||
|
||||
const HTML_ESCAPE = {
|
||||
@@ -41,7 +41,7 @@ export function highlightDecodalTokens(source, tokens) {
|
||||
|
||||
function tokenClass(kind, text) {
|
||||
if (['let', 'in', 'fn', 'match', 'import', 'default'].includes(kind)) return 'tok-keyword';
|
||||
if (kind === 'ident' && ['String', 'Int', 'Float', 'Bool'].includes(text)) return 'tok-type';
|
||||
if (kind === 'ident' && ['String', 'Int', 'Float', 'Bool', 'Unknown'].includes(text)) return 'tok-type';
|
||||
if (kind === 'ident') return '';
|
||||
if (['true', 'false'].includes(kind)) return 'tok-literal';
|
||||
if (['int', 'float'].includes(kind)) return 'tok-number';
|
||||
|
||||
@@ -22,6 +22,13 @@ test('injects one JavaScript host environment into evaluation and completion', a
|
||||
active: { $decodal: 'Bool', default: true },
|
||||
},
|
||||
},
|
||||
OpenConfig: {
|
||||
$decodal: 'Object',
|
||||
fields: {
|
||||
enabled: { $decodal: 'Bool', default: true },
|
||||
},
|
||||
rest: { $decodal: 'Unknown' },
|
||||
},
|
||||
},
|
||||
},
|
||||
loadImport(_currentKey, specifier) {
|
||||
@@ -46,11 +53,12 @@ test('injects one JavaScript host environment into evaluation and completion', a
|
||||
const evaluated = JSON.parse(service.evaluate(
|
||||
'main.dcdl',
|
||||
'main.dcdl',
|
||||
'let s = import "./schema.dcdl"; in { server = { port = 8080; } as s.Server; services = { api = { port = 8081; }; } as App.Services; enabled = App.enabled; post = import "./post.md" as { frontmatter = { draft = Bool; }; body = String; }; }',
|
||||
'let s = import "./schema.dcdl"; in { server = { port = 8080; } as s.Server; services = { api = { port = 8081; }; } as App.Services; open = { enabled = false; plugin = { name = "cache"; }; } as App.OpenConfig; enabled = App.enabled; post = import "./post.md" as { frontmatter = { draft = Bool; }; body = String; }; }',
|
||||
));
|
||||
assert.equal(evaluated.ok, true, evaluated.error);
|
||||
assert.match(evaluated.output, /"port": 8080/);
|
||||
assert.match(evaluated.output, /"active": true/);
|
||||
assert.match(evaluated.output, /"plugin": \{/);
|
||||
assert.match(evaluated.output, /"body": "# Hello"/);
|
||||
|
||||
const member = JSON.parse(service.complete('main.dcdl', 'App.en', 6, false));
|
||||
@@ -61,5 +69,9 @@ test('injects one JavaScript host environment into evaluation and completion', a
|
||||
assert.equal(imported.ok, true, imported.error);
|
||||
assert.ok(imported.completion.options.some((item) => item.label === './schema.dcdl'));
|
||||
|
||||
const unknown = JSON.parse(service.complete('main.dcdl', 'Unk', 3, false));
|
||||
assert.equal(unknown.ok, true, unknown.error);
|
||||
assert.ok(unknown.completion.options.some((item) => item.label === 'Unknown'));
|
||||
|
||||
service.free();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user